using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._TINDataset._Conversion
{
    /// <summary>
    /// <para>TIN Triangle</para>
    /// <para>Exports triangle faces from a TIN dataset to polygon features  and provides slope, aspect, and optional attributes of hillshade and tag values for each triangle.</para>
    /// <para>将 TIN 数据集中的三角形面导出为面要素，并为每个三角形提供坡度、坡向和山体阴影的可选属性以及标记值。</para>
    /// </summary>    
    [DisplayName("TIN Triangle")]
    public class TinTriangle : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public TinTriangle()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_tin">
        /// <para>Input TIN</para>
        /// <para>The TIN dataset to process.</para>
        /// <para>要处理的 TIN 数据集。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will be produced.</para>
        /// <para>将生成的要素类。</para>
        /// </param>
        public TinTriangle(object _in_tin, object _out_feature_class)
        {
            this._in_tin = _in_tin;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "TIN Triangle";

        public override string CallName => "3d.TinTriangle";

        public override List<string> AcceptEnvironments => ["XYDomain", "XYResolution", "XYTolerance", "ZDomain", "ZResolution", "ZTolerance", "autoCommit", "configKeyword", "extent", "geographicTransformations", "outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_in_tin, _out_feature_class, _units.GetGPValue(), _z_factor, _hillshade.GetGPValue(), _tag_field];

        /// <summary>
        /// <para>Input TIN</para>
        /// <para>The TIN dataset to process.</para>
        /// <para>要处理的 TIN 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input TIN")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_tin { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will be produced.</para>
        /// <para>将生成的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Slope Units</para>
        /// <para><xdoc>
        ///   <para>The units of measure to be used in calculating slope.</para>
        ///   <bulletList>
        ///     <bullet_item>Percent—Slope is expressed as a percentage value. This is the default.</bullet_item><para/>
        ///     <bullet_item>Degree—Slope is expressed as the angle of inclination from a horizontal plane.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于计算坡度的测量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>百分比 - 斜率以百分比值表示。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>度 （Degree） - 坡度 （Slope） 表示为与水平面的倾斜角。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Slope Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _units_value _units { get; set; } = _units_value._PERCENT;

        public enum _units_value
        {
            /// <summary>
            /// <para>Percent</para>
            /// <para>Percent—Slope is expressed as a percentage value. This is the default.</para>
            /// <para>百分比 - 斜率以百分比值表示。这是默认设置。</para>
            /// </summary>
            [Description("Percent")]
            [GPEnumValue("PERCENT")]
            _PERCENT,

            /// <summary>
            /// <para>Degree</para>
            /// <para>Degree—Slope is expressed as the angle of inclination from a horizontal plane.</para>
            /// <para>度 （Degree） - 坡度 （Slope） 表示为与水平面的倾斜角。</para>
            /// </summary>
            [Description("Degree")]
            [GPEnumValue("DEGREE")]
            _DEGREE,

        }

        /// <summary>
        /// <para>Z Factor</para>
        /// <para>The factor by which z-values will be multiplied. This is typically used to convert z linear units to match x,y linear units. The default is 1, which leaves elevation values unchanged. This parameter is not available if the spatial reference of the input surface has a z datum with a specified linear unit.</para>
        /// <para>z 值将乘以的因子。这通常用于转换 z 线性单位以匹配 x，y 线性单位。默认值为 1，使高程值保持不变。如果输入曲面的空间参考具有具有指定线性单位的 z 基准面，则此参数不可用。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _z_factor { get; set; } = 1;


        /// <summary>
        /// <para>HILLSHADE azimuth, altitude</para>
        /// <para>Specifies the azimuth and altitude angles of the light source when applying a hillshade effect for the feature layer output. Azimuth can range from 0 to 360 degrees, whereas altitude can range from 0 to 90. An azimuth of 45 degrees and altitude of 30 degrees would be entered as "HILLSHADE 45, 30".</para>
        /// <para>指定在为要素图层输出应用山体阴影效果时光源的方位角和高度角。方位角的范围可以从 0 到 360 度，而高度的范围可以从 0 到 90。方位角为 45 度，高度为 30 度，将输入为“HILLSHADE 45， 30”。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("HILLSHADE azimuth, altitude")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _hillshade_value? _hillshade { get; set; } = null;

        public enum _hillshade_value
        {
            /// <summary>
            /// <para>HILLSHADE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("HILLSHADE")]
            [GPEnumValue("HILLSHADE")]
            _HILLSHADE,

        }

        /// <summary>
        /// <para>Tag Value Field</para>
        /// <para>The field name in the output feature that will store the triangle tag value. This parameter is empty by default, which will result in tag values not being written to the output.</para>
        /// <para>输出要素中将存储三角形标签值的字段名称。默认情况下，此参数为空，这将导致标记值不会写入输出。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tag Value Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _tag_field { get; set; } = null;


        public TinTriangle SetEnv(object XYDomain = null, object XYResolution = null, object XYTolerance = null, object ZDomain = null, object ZResolution = null, object ZTolerance = null, int? autoCommit = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, ZDomain: ZDomain, ZResolution: ZResolution, ZTolerance: ZTolerance, autoCommit: autoCommit, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}